package com.itboye.lottery.utils;

import android.util.Log;

import com.itboye.lottery.bean.CodeBean;

import java.util.ArrayList;

public class CodeUtil {

    public static ArrayList<CodeBean> initCodeData(int length, int type) {
        ArrayList<CodeBean> codeBeanArrayList = new ArrayList<>();
        for (int i = 0; i < length; i++) {
            CodeBean codeBean = new CodeBean();
            codeBean.setCodeValue(i + 1);
            codeBean.setCodeText(i + 1 < 10 ? "0" + (i + 1) : i + 1 + "");
            codeBean.setType(type);//号码类型
            codeBean.setSelect(false);//默认未选中
            codeBeanArrayList.add(codeBean);
        }
        return codeBeanArrayList;
    }

    /**
     * 随机指定范围内N个不重复的数
     * 最简单最基本的方法
     *
     * @param min 指定范围最小值
     * @param max 指定范围最大值
     * @param n   随机数个数
     */
    public static ArrayList<CodeBean> randomCommon(int min, int max, int n) {
        Log.v("random_code", "--------------------------------------------------\n");
        if (n > (max - min + 1) || max < min) {
            return null;
        }
        int[] result = new int[n];
        int count = 0;
        generateCode(n, min, max, result, count, null);

        ArrayList<CodeBean> randomCodeArray = new ArrayList<>();
        for (int i = 0; i < result.length; i++) {
            CodeBean codeBean = new CodeBean();
            codeBean.setCodeValue(result[i]);
            randomCodeArray.add(codeBean);
        }
        Log.v("random_code", "--------------------------------------------------");
        return randomCodeArray;
    }

    /**
     * 随机指定范围内N个不重复的数
     * 最简单最基本的方法
     *
     * @param min  指定范围最小值
     * @param max  指定范围最大值
     * @param n    随机数个数
     * @param type 0：红色 1红色托马 2：蓝色
     */
    public static ArrayList<CodeBean> randomCommon(int min, int max, int n, int type) {
        Log.v("random_code", "--------------------------------------------------\n");
        if (n > (max - min + 1) || max < min) {
            return null;
        }
        int[] result = new int[n];
        int count = 0;
        generateCode(n, min, max, result, count, null);

        ArrayList<CodeBean> randomCodeArray = new ArrayList<>();
        for (int i = 0; i < result.length; i++) {
            CodeBean codeBean = new CodeBean();
            codeBean.setCodeValue(result[i]);
            codeBean.setCodeText(result[i] < 10 ? "0" + result[i] : result[i] + "");
            codeBean.setType(type);
            randomCodeArray.add(codeBean);
        }
        Log.v("random_code", "--------------------------------------------------");
        return randomCodeArray;
    }

    /**
     * 随机指定范围内N个不重复的数
     * 最简单最基本的方法
     *
     * @param min               指定范围最小值
     * @param max               指定范围最大值
     * @param n                 随机数个数
     * @param type              0：红色 1红色托马 2：蓝色
     * @param codeBeanArrayList 要对比的码
     */
    public static ArrayList<CodeBean> randomCommon(int min, int max, int n, int type, ArrayList<CodeBean> codeBeanArrayList) {
        Log.v("random_code", "--------------------------------------------------\n");
        if (n > (max - min + 1) || max < min) {
            return null;
        }
        int[] result = new int[n];
        int count = 0;
        generateCode(n, min, max, result, count, codeBeanArrayList);

        ArrayList<CodeBean> randomCodeArray = new ArrayList<>();
        for (int i = 0; i < result.length; i++) {
            CodeBean codeBean = new CodeBean();
            codeBean.setCodeValue(result[i]);
            codeBean.setCodeText(result[i] < 10 ? "0" + result[i] : result[i] + "");
            codeBean.setType(type);
            randomCodeArray.add(codeBean);
        }
        Log.v("random_code", "--------------------------------------------------");
        return randomCodeArray;
    }

    private static void generateCode(int n, int min, int max, int[] result, int count, ArrayList<CodeBean> codeBeanArrayList) {
        while (count < n) {
            int num = (int) (Math.random() * (max - min)) + min;
            //红色胆码不能与红色拖码重复
            boolean isTheSame = false;
            if (codeBeanArrayList != null) {
                for (CodeBean codeBean : codeBeanArrayList) {
                    if (codeBean.getCodeValue() == num) {
                        isTheSame = true;
                        Log.v("random_code", "the same random code" + num);
                        break;
                    }
                }
            }
            if (isTheSame) {
                continue;
            }
            boolean flag = true;
            for (int j = 0; j < n; j++) {
                if (num == result[j]) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                Log.v("random_code", num + "");
                result[count] = num;
                count++;
            }
        }
    }
}
